//返回通过谓词测试的类似数组的第一个索引。
// 类似于_.indexOf，当predicate通过真检查时，返回第一个索引值；否则返回-1

import { cb } from "../util/iteratee"
import { getLength } from "../collections/each"

function createPredicateIndexFinder(dir) {
  return function (array, predicate, context) {
    predicate = cb(predicate, context)
    var length: number = getLength(array)
    var index = dir > 0 ? 0 : length - 1
    for (; index >= 0 && index < length; index += dir) {
      if (predicate(array[index], index, array)) return index
    }
    return -1
  }
}

export const findIndex = createPredicateIndexFinder(1)
export const findLastIndex = createPredicateIndexFinder(-1)